/* 递归求阶乘 */
console.log("********************递归求阶乘*****************");
function digui(n) {
  if (n === 1) {
    return 1;
  }
  return n * digui(n - 1);
}
let demo = digui(50);
console.log(demo);

/* 计算程序运行时间 */
console.log("********************计算程序运行时间*****************");

console.time("timer");
console.timeEnd("timer");

/* 选择排序 */
console.log("********************选择排序*****************");
function arrSort(arr) {
  for (let i = 0; i < arr.length; i++) {
    for (let j = i + 1; j < arr.length; j++) {
      if (arr[i] > arr[j]) {
        let temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
      }
    }
  }
}
let arr = [8, 5, 6, 8, 9, 6, 1, 2, 3, 4, 6, 0, 4, 10, 6, 8, 7];
arrSort(arr);
console.log(arr);

/* 冒泡排序 */
console.log("********************冒泡排序*****************");
function arrSort2(arr) {
  let n = arr.length;
  for (let i = 0; i < n; i++) {
    // 移到最后面的数字不用比较；每次循环将一个最大数字放到最后
    for (let j = 0; j < n - i - 1; j++) {
      if (arr[j] > arr[j + 1]) {
        let temp = arr[j];
        arr[j] = arr[j + 1];
        arr[j + 1] = temp;
      }
    }
  }
}
let arr2 = [8, 5, 6, 8, 9, 6, 1, 2, 3, 4, 6, 0, 4, 10, 6, 8, 7];
arrSort2(arr2);
console.log(arr2);

/* 插入排序 */
console.log("********************插入排序*****************");

function arrSort3(arr) {
  let n = arr.length;
  // 从第二个数据开始比较:i是取出来的数字
  for (let i = 1; i < n; i++) {
    // j是i之前的数字
    for (let j = i - 1; j >= 0; j--) {
      // 如果选出的数字比前面的某一个大，就放在它的右边
      if (arr[i] > arr[j]) {
        arr.splice(j + 1, 0, ...arr.splice(i, 1));
        break;
      }
      // 边界条件：比第一个值还小，放在开头
      if (j === 0 && arr[i] < arr[j]) {
        arr.splice(j, 0, ...arr.splice(i, 1));
        break;
      }
    }
  }
  return arr;
}
// let arr3 = [3, 2, 9, 8, 5, 6, 1, 7, 4, 0];
let arr3 = [50, 5, -1, 8, 5, 9, 58, 7, 5, 8];
arrSort3(arr3);
console.log(arr3);
